home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FANTA 97
/
FANTA97A (backup).iso
/
FRONTPAG.SX
/
fp_install.sh
< prev
next >
Wrap
Linux/UNIX/POSIX Shell Script
|
1997-09-18
|
51KB
|
2,045 lines
#! /bin/sh
#
# Copyright 1996 Microsoft Corporation -- All Rights Reserved.
#
# $Revision: 1.29 $
# $Date: 1997/09/16 01:16:00 $
#
step1()
{
echo
echo "Step 1. Setting Up Installation Environment"
echo
checkuser || error # Check to make sure we are root
banner
usrlocalexists || error # Check to make sure that /usr/local exists
checkforaccess || error # Check for RWX access to /usr/local
wheretoinstall || error # Find out where to install the extensions
}
step2()
{
echo
echo "Step 2. Untarring the Extensions and Checking Protections"
echo
untarext || error # Untar the extensions
currentversionlink || error # Create currentversion link
}
step3()
{
echo
echo "Step 3. Upgrading/Installing the extensions"
echo
upgradeexistingservers || error # Check to see if servers need upgrading
chownexistingservers || error
installrootweb || error # Install the root web
installnewsubwebs $PORT || error # Install new servers
installvirtualwebs || error # Install any virtual webs
}
initialize()
{
VERSION="3.0"
PATH=".:/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb:/etc:/usr/bsd"
INSTALLDIRDEFAULT="/usr/local/frontpage"
case "`echo 'x\c'`" in
'x\c') echo="echo -n" nnl= ;; #BSD
x) echo="echo" nnl="\c" ;; # Sys V
*) echo "$0 quitting: Can't set up echo." ; exit 1 ;;
esac
TAB=" "
system=`uname -a`
case "$system" in
OSF1*) machine="alpha" ;;
Linux*) machine="linux" ;;
HP-UX*) machine="hp700" ;;
AIX*) machine="rs6000" ;;
IRIX*) machine="sgi" ;;
SunOS*5.*sun4*) machine="solaris" ;;
SunOS*4.*sun4*) machine="sunos";;
SunOS*sun3*) machine="sunos" ;;
*BSD/OS?3.0*) machine="bsdi3" ;;
BSD/OS*) machine="bsdi" ;;
SCO_SV*) machine="sco5" ;;
*) echo "ERROR: Unsupported platform! Uname is $system."
return 1
;;
esac
awk=awk
lsg="ls -ld"
case "$machine" in
sunos) awk=nawk
lsg="ls -ldg"
;;
solaris) awk=nawk ;;
sgi) awk=nawk ;;
esac
}
checkuser()
{
#
# Make sure we are not running as root.
#
whoami=`whoami 2>/dev/null` || whoami=`/usr/bin/id | sed -e ' s/).*//; s/^.*(//;'`
retval=0
echo "Setting umask 002"
umask 002
if [ $whoami != "root" ]
then
echo "ERROR: Logged in as $whoami. Must be root to do this installation!"
retval=1
else
echo "Logged in as root."
fi
return $retval
}
banner()
{
cat <<EOF
fp_install.sh
Revision$Revision: 1.29 $dummy
Date$Date: 1997/09/16 01:16:00 $dummy
This script will step the user through upgrading existing and installing
new servers and webs. As with any software installation, a backup should be
done before continuing. It is recommended that the FrontPage installation
directory, server configuration file directory, and all web content be
backed up before continuing with this installation.
EOF
myprompt 'yYnN' "Are you satisfied with your backup of the system (y/n)" "N"
if [ $answer = n ] || [ $answer = N ]
then
exit 0
fi
echo
return 0
}
myprompt()
{
answer="|"
until echo $1 | grep $answer >/dev/null
do
$echo "${2} [${3}]? ${nnl}"
read answer
if [ "$3" != "" ] && [ "$answer" = "" ]
then
answer=$3
fi
done
}
getpassword()
{
prompt=$1
PASSWORD=""
until [ "$PASSWORD" != "" ]
do
$echo "$prompt: ${nnl}"
stty -echo
read password1
stty echo
echo
$echo "Re-enter $prompt: ${nnl}"
stty -echo
read password2
stty echo
echo
if [ "$password1" = "$password2" ]
then
PASSWORD=$password1
fi
done
return 1
}
usrlocalexists()
{
#
# Now lets make sure that /usr/local exists.
#
localdir="/usr/local"
prot=755
retval=0
if [ ! -d "$localdir" ]
then
myprompt 'yYnN' "$localdir does not exist. Would you like to create it (y/n)" "Y"
if [ $answer = y ] || [ $answer = Y ]
then
echo "Creating $localdir"
if mkdir "$localdir"
then
echo "Directory $localdir has been created."
if chmod "$prot" "$localdir"
then
echo "Directory $localdir chmoded to $prot."
else
echo "ERROR: Unable to chmod $localdir to $prot."
retval=1
fi
else
echo "ERROR: Unable to create $localdir!"
retval=1
fi
else
echo "ERROR: Directory $localdir must exist!"
retval=1
fi
else
if [ ! -d "$localdir" ]
then
echo "ERROR: $localdir exists but is not a directory!"
retval=1
else
echo "Directory $localdir exists."
fi
fi
return $retval
}
checkforaccess()
{
#
# Make sure that we have the correct access to /usr/local
#
retval=0
#
# Check to make sure that we have read access to the directory
#
comma=""
if [ ! -r /usr/local ]
then
noaccess="Read"
comma=", "
fi
#
# Check to make sure that we have write access to the directory
#
if [ ! -w /usr/local ]
then
noaccess="$noaccess${comma}Write"
comma=", "
fi
#
# Check to make sure that we have execute access to the directory
#
if [ ! -x /usr/local ]
then
noaccess="$noaccess${comma}Execute"
fi
if [ "$noaccess" != "" ]
then
echo "ERROR: Root does not have $noaccess access to /usr/local!"
retval=1
else
echo "Root has necessary access to /usr/local."
fi
return $retval
}
wheretoinstall()
{
#
# Find out where to install the extensions and create directory and/or link
# as necessary.
#
retval=0
echo
echo "Where would you like to install the FrontPage Extensions. If you"
echo "select a location other than /usr/local/frontpage/ then a symbolic"
echo "link will be created from /usr/local/frontpage/ to the location that"
echo "is chosen."
echo
$echo "FrontPage Extensions directory [/usr/local/frontpage/]: ${nnl}"
read installdir
if [ "$installdir" = "" ]
then
installdir=$INSTALLDIRDEFAULT
fi
installdir=`dirname $installdir`/`basename $installdir`/
if [ ! -d "$installdir" ]
then
echo "Creating $installdir"
if mkdir "$installdir"
then
echo "Directory $installdir has been created."
if chmod "$prot" "$installdir"
then
echo "Directory $installdir chmoded to $prot."
else
echo "ERROR: Unable to chmod $installdir to $prot."
retval=1
fi
else
echo "ERROR: Unable to create $installdir!"
retval=1
fi
else
echo "WARNING: Directory $installdir already exists."
echo "Installation will overwrite existing files."
echo
myprompt 'yYnN' "Continue the installation (y/n)" "N"
echo
if [ $answer = n ] || [ $answer = N ]
then
exit 0
fi
fi
if [ "$installdir" != "/usr/local/frontpage/" ]
then
if [ ! -d "/usr/local/frontpage" ]
then
if ln -s "$installdir" "/usr/local/frontpage"
then
echo "ERROR: Unable to snap link /usr/local/frontpage --> $installdir!"
retval=1
else
echo "Snapped link /usr/local/frontpage --> $installdir"
fi
else
echo "ERROR: Unable to snap link /usr/local/frontpage --> $installdir, /usr/local/frontpage already exists!"
retval=1
fi
fi
return $retval
}
untarext()
{
#
# Untar the extensions into the installation directory and check permissions
#
retval=0
if [ -d "${installdir}version${VERSION}" ]
then
echo "Version $VERSION FrontPage Server Extensions found."
myprompt 'yYnN' "Would you like to overwrite? (y/n)" "Y"
echo
if [ $answer = n ] || [ $answer = N ]
then
echo "No need to un-tar the extensions. Continuing..."
return $retval
else
echo "Looking for tar file..."
fi
else
echo "Version $VERSION FrontPage Server Extensions not found."
echo "Looking for tar file..."
fi
vtfile="fp30.$machine.tar"
echo "Platform is $machine."
vtfilelocation="`pwd`/"
getextfilename $vtfilelocation $vtfile || return 1
olddir=`pwd`
cd /usr/local
case $fullvtfile in
*tar) echo "Untarring file $fullvtfile into /usr/local..."
tar -xf $fullvtfile ;;
*Z) echo "Uncompressing/Untarring file $fullvtfile into /usr/local..."
zcat $fullvtfile | tar -xf -
;;
*gz) zcat=""
while [ "$zcat" = "" ] || [ ! -f "$zcat" ]
do
$echo "Where is the zcat which can uncompress gz files? ${nnl}"
read zcat
base=`basename zcat`
case $base in
zcat) ;;
*) zcat=`dirname $zcat`/`basename $zcat`/zcat ;;
esac
done
echo "Uncompressing/Untarring file $fullvtfile into /usr/local..."
$zcat $fullvtfile | tar -xf -
;;
*) echo "ERROR: Unknown file type: $fullvtfile"
return 1
;;
esac
cd $olddir
return $retval
}
getextfilename()
{
vtfilelocation=$1
vtfile=$2
fullvtfile="${vtfilelocation}${vtfile}"
if [ ! -f "$fullvtfile" ]
then
if [ -f "${fullvtfile}.Z" ]
then
fullvtfile="${fullvtfile}.Z"
else
if [ -f "${fullvtfile}.gz" ]
then
fullvtfile="${fullvtfile}.gz"
else
echo "Cannot find the FrontPage Extensions tar file in ${vtfilelocation}."
$echo "Which directory is the file located in (X to cancel)? ${nnl}"
read vtfilelocation
if [ "$vtfilelocation" = "X" ] || [ "$vtfilelocation" = "x" ]
then
return 1
else
vtfilelocation=`echo $vtfilelocation | sed -e 's/\/$//'`
if [ ! -d "$vtfilelocation" ]
then
vtfilelocation=`dirname $vtfilelocation`
fi
getextfilename $vtfilelocation/ $vtfile
fi
fi
fi
fi
}
currentversionlink()
{
#
# Make sure that untarring preserved all permissions, including SUID of
# Apache stubs.
#
retval=0
rm -f $installdir'currentversion'
ln -s $installdir'version'$VERSION $installdir'currentversion'
return $retval
}
upgradeexistingservers()
{
retval=0
echo "Checking for existing web servers to upgrade..."
upgrade="none"
for file in ${installdir}*.cnf
do
if [ "$file" = "${installdir}*.cnf" ]
then
echo "No existing web servers found to upgrade."
return $retval
fi
cat <<EOF
Existing web servers were found.
You can upgrade them later by re-running fp_install.sh and
answering yes to the following question.
EOF
myprompt 'yYnN' "Would you like to upgrade them now (y/n)" "Y"
if [ $answer = n ] || [ $answer = N ]
then
upgrade="no"
echo "For details on how to upgrade servers manually, please see"
echo "the Server Extension Resource Kit (SERK), located in"
echo "/usr/local/frontpage/version3.0/serk"
echo
return $retval
else
upgrade="yes"
cat <<EOF
The file ${installdir}currentversion/upgrade_results.txt will
contain Success/Fail status for the upgrades. When the upgrade is
complete you should examine this file to make sure that all of the
upgrades completed successfully.
EOF
$echo "Hit enter to continue${nnl}"
read continue
echo
echo "All existing servers will now be upgraded:"
echo " "
fi
break
done
createdate=`date`
cat >${installdir}currentversion/upgrade_results.txt <<EOF
#
# Server Upgrade Results
#
# Automatically generated by fp_install.sh on $createdate
#
EOF
for weconfigfile in ${installdir}*.cnf
do
echo
echo "Upgrading using configuration file: "$weconfigfile
if verifywebserver $weconfigfile
then
if upgradeserver $weconfigfile
then
echo "Upgrade Successful $weconfigfile" >> ${installdir}currentversion/upgrade_results.txt
else
echo "Upgrade Failed $weconfigfile" >> ${installdir}currentversion/upgrade_results.txt
echo "ERROR: Server upgrade failed!"
echo "Continuing with next server."
$echo "Hit enter to continue${nnl}"
read continue
fi
else
echo "Cancelling upgrade..."
echo "Upgrade Failed $weconfigfile" >> ${installdir}currentversion/upgrade_results.txt
fi
done
weconfigfile=""
return $retval
}
verifywebserver()
{
weconfigfile="$1"
conf=`basename $weconfigfile`
port=`echo $conf | sed -e '
s/:/:/
tmulti
s/.cnf$//
s/.*[^0-9]//
q
:multi
s/.cnf$//'`
echo "Verifying web server configuration..."
configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
s/serverconfig://g
s/fakeconf.*\///'`
if [ ! -f "$configfile" ]
then
echo "$configfile does not exist."
return 1
fi
servertype=`grep -i "^servertype:" $weconfigfile | sed -e 's/servertype://g'`
configfiledir=`dirname $configfile`"/"
if [ $servertype = "cern" ]
then
echo "This version of fp_install.sh does not suppport cern servers."
echo "For details on how to install or upgrade servers manually, please see"
echo "the Server Extension Resource Kit (SERK), located in"
echo "/usr/local/frontpage/version3.0/serk"
return 1
fi
getdocroot $weconfigfile ||
{
echo "ERROR: Unable to get DocumentRoot/UserDir"
return 1
}
case $servertype in
*pache*) getHttpDirective $configfile AccessConfig $port
if [ "$param" != "" ]
then
file=`basename $param`
accessconffile="${configfiledir}${file}"
else
accessconffile="${configfiledir}access.conf"
fi
if [ ! -f "$accessconffile" ]
then
echo "$accessconffile does not exist."
return 1
fi
;;
ncsa) getHttpDirective $configfile AccessConfig $port
if [ "$param" != "" ]
then
file=`basename $param`
accessconffile="${configfiledir}${file}"
else
accessconffile="${configfiledir}access.conf"
fi
if [ ! -f "$accessconffile" ]
then
echo "$accessconffile does not exist."
return 1
fi
;;
esac
servicesfile=${docroot}"/_vti_pvt/services.cnf"
if [ ! -f "$servicesfile" ]
then
echo "There are no services to upgrade for this web."
return 1
fi
return 0
}
chownexistingservers()
{
retval=0
if [ "$upgrade" = "yes" ]
then
echo
echo "Preparing to chown webs..."
cat <<EOF
Your webs have been upgraded to use the new FrontPage Server Extensions. The
next step is to chown the web in order to guarantee that the extensions will
work properly. At this point you have two options:
1. This script will prompt you interactively for an owner and group of
each web and then perform the chown. If you do not have a lot of
webs you might want to choose this option.
2. This script will generate a script, which you can edit to fill in the
owner and group for each web, to run at a later date. If you have a
large number of webs you might want to choose this option.
EOF
echo "Would you like to be prompted interactively for"
myprompt 'yYnN' "each webs owner/group (y/n)" "Y"
if [ $answer = y ] || [ $answer = Y ]
then
chownwebs
else
generatechownscript $file ||
(
echo "ERROR: Server chown failed! Continuing with next server."
$echo "Hit enter to continue${nnl}"
read continue
)
fi
return $retval
fi
}
chownwebs()
{
retval=0
for weconfigfile in ${installdir}*.cnf
do
if grep Failed ${installdir}currentversion/upgrade_results.txt | grep ${weconfigfile} > /dev/null
then
echo
echo "Upgrade of ${weconfigfile} failed."
echo "See ${installdir}currentversion/upgrade_results.txt"
echo "Skipping chown..."
else
chownWeb $weconfigfile
fi
done
weconfigfile=""
return $retval
}
chownWeb()
{
weconfigfile=$1
echo
conf=`basename $weconfigfile`
webport=`echo $conf | sed -e '
s/:/:/
tmulti
s/.cnf$//
s/.*[^0-9]//
q
:multi
s/.cnf$//'`
port=$webport
echo "Processing webs in port $webport..."
echo
servertype=`grep -i "^servertype:" $weconfigfile | sed -e 's/servertype://g'`
configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
s/serverconfig://g
s/fakeconf.*\///'`
configfiledir=`dirname $configfile`"/"
getdocroot $weconfigfile ||
{
echo "ERROR: Unable to get DocumentRoot/UserDir"
return 1
}
servicesfile=${docroot}"/_vti_pvt/services.cnf"
exec 4<&0
exec <$servicesfile
n=0
while read service
do
echo
if [ $service = "/" ]
then
webname=""
webtext="root web"
web=""
else
webname="$service"
webtext="$service"
web="-w $webname"
fi
exec 5<&0
exec 0<&4
getdocroot $weconfigfile ||
{
echo "ERROR: Unable to get DocumentRoot/UserDir"
return 1
}
case $service in
/~*) owner=`echo $service | sed -e 's/\///'`
webowner=`echo $service | sed -e 's/\/~//'`
homedir=`finger $webowner | $awk ' { if (NR==2) print $2}'`
if [ -d "${homedir}/${userdir}" ]
then
echo "Web ${webtext} on port ${webport} will be owned by ${webowner}"
defwebgroup=`$lsg ${homedir}/${userdir} | $awk ' { print $4}'`
exists=0
else
exists="${homedir}/${userdir}"
fi
;;
*) if [ -d "${docroot}/${service}" ]
then
defwebowner=`$lsg ${docroot}${service} | $awk ' { print $3}'`
defwebgroup=`$lsg ${docroot}${service} | $awk ' { print $4}'`
webowner=""
until [ "$webowner" != "" ]
do
$echo "Who should own web ${webtext} on port ${webport} [${defwebowner}]: ${nnl}"
read webowner
if [ "$webowner" = "" ]
then
webowner=$defwebowner
fi
done
exists=0
else
exists="${docroot}/${service}"
fi
;;
esac
if [ "$exists" = "0" ]
then
webgroup=""
until [ "$webgroup" != "" ]
do
$echo "What should the group for web ${webtext} on port ${webport} be [${defwebgroup}]: ${nnl}"
read webgroup
if [ "$webgroup" = "" ]
then
webgroup=$defwebgroup
fi
done
/usr/local/frontpage/version${VERSION}/bin/fpsrvadm.exe -o chown -p $webport $web -xUser $webowner -xGroup $webgroup ||
{
echo
echo "ERROR: Unable to chown web ${webtext} in port ${webport}"
$echo "Hit enter to continue${nnl}"
read continue
}
else
echo "ERROR: web $service - $exists does not exist! Skipping to next web."
fi
exec 0<&5
done
exec <&4
}
generatechownscript()
{
retval=0
scriptout="/usr/local/frontpage/version${VERSION}/fp_chown.sh"
createdate=`date`
cat <<EOF
A script will be generated in ${scriptout}
which you can edit to chown your webs at a future date. You will
need to edit the script and set the owner and group for each web
before running the script.
EOF
cat >$scriptout <<EOF
#! /bin/sh
#
#
# Copyright 1996 Microsoft Corporation -- All Rights Reserved.
#
# Automatically generated by fp_install.sh
#
# Automatically generated by fp_install.sh on $createdate
#
# You will need to edit this script before running it. Change each
# <OWNER> and <GROUP> to reflect the ownership/group that you want
# set for the web.
#
# Example: 80 /testweb webowner webgroup
#
VERSION="3.0"
chown_web()
{
port=\$1
webname=\$2
webowner=\$3
webgroup=\$4
if [ "\$webowner" = "<OWNER>" ] || [ "\$webgroup" = "<GROUP>" ]
then
echo "WARNING: Owner/Group not specified for web \$webname on \$port."
echo "Skipping to next web..."
else
if [ "\$webname" != "/" ]
then
webname=\`echo \$webname | sed -e 's%^/%%g'\`
webtext="\$webname"
web="-w \$webname"
else
webtext="root web"
web=""
fi
echo
echo "Chowning web \${webtext} in port \${port} to owner \${webowner} group \${webgroup}"
/usr/local/frontpage/version3.0/bin/fpsrvadm.exe -o chown -p \$port \$web -xUser \$webowner -xGroup \$webgroup
fi
}
while read port webname webowner webgroup
do
chown_web \$port \$webname \$webowner \$webgroup
done <<ENDCHOWN
EOF
for weconfigfile in ${installdir}*.cnf
do
if grep Failed ${installdir}currentversion/upgrade_results.txt | grep ${weconfigfile} > /dev/null
then
echo
echo "Upgrade of ${weconfigfile} failed."
echo "See ${installdir}currentversion/upgrade_results.txt"
echo "Skipping chown..."
else
addChownWeb $weconfigfile
fi
done
echo "ENDCHOWN" >>$scriptout
chmod 764 $scriptout
weconfigfile=""
return $retval
}
addChownWeb()
{
weconfigfile=$1
echo
echo "Processing $weconfigfile"
conf=`basename $weconfigfile`
webport=`echo $conf | sed -e '
s/:/:/
tmulti
s/.cnf$//
s/.*[^0-9]//
q
:multi
s/.cnf$//'`
port=$webport
echo "Adding webs in port ${webport} to chown script..."
servertype=`grep -i "^servertype:" $weconfigfile | sed -e 's/servertype://g'`
configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
s/serverconfig://g
s/fakeconf.*\///'`
configfiledir=`dirname $configfile`"/"
getdocroot $weconfigfile ||
{
echo "ERROR: Unable to get DocumentRoot/UserDir"
return 1
}
servicesfile="${docroot}/_vti_pvt/services.cnf"
if [ -r $servicesfile ]
then
exec 4<&0
exec <$servicesfile
n=0
while read service
do
if [ $service = "/" ]
then
webtext="root web"
else
webtext="$service"
fi
case $service in
/~*) owner=`echo $service | sed -e 's/\///'`
webowner=`echo $service | sed -e 's/\/~//'`
homedir=`finger $webowner | $awk ' { if (NR==2) print $2}'`
if [ -d "${homedir}/${userdir}" ]
then
webgroup=`$lsg ${homedir}/${userdir} | $awk ' { print $4}'`
exists="0"
else
exists="${homedir}/${userdir}"
fi
;;
*) if [ -d "${docroot}/${service}" ]
then
webowner=`$lsg ${docroot}${service} | $awk ' { print $3}'`
webgroup=`$lsg ${docroot}${service} | $awk ' { print $4}'`
exists="0"
else
exists="${docroot}/${service}"
fi
;;
esac
if [ "$exists" = "0" ]
then
echo "web ${webtext}"
echo "$webport $service $webowner $webgroup" >> $scriptout
else
echo "ERROR: web ${webtext}- Path $exists does not exist! Skipping to next web."
fi
done
exec <&4
else
echo "WARNING: Unable to read $servicesfile!"
echo "Skipping to next port."
fi
}
upgradeserver()
{
retval=0
weconfigfile="$1"
bindir=$installdir'version'$VERSION'/bin/'
conf=`basename $weconfigfile`
echo "Upgrading server "$port
/usr/local/frontpage/version${VERSION}/bin/fpsrvadm.exe -o upgrade -p $port
return $retval
}
installrootweb()
{
retval=0
configfile=""
admin=""
port=""
multihost=""
webname=""
webowner=""
adminpwd=""
servertype=""
echo
echo "Note: If you have not installed the root web then you need to do it now."
echo
myprompt 'yYnN' "Do you want to install a root web (y/n)" "Y"
if [ $answer = n ] || [ $answer = N ]
then
return $retval
fi
echo " "
echo "Installing the root web..."
echo " "
webname="/"
configfile=""
while ( [ "$configfile" = "" ] || [ ! -f $configfile ] )
do
$echo "Server config filename: ${nnl}"
read configfile
done
admin=""
until [ "$admin" != "" ]
do
$echo "FrontPage Administrator's user name: ${nnl}"
read admin
done
getpassword "FrontPage Administrator's password"
adminpwd=$PASSWORD
getparam Port $configfile
port=$param
until [ "$port" != "" ]
do
$echo "Enter the new servers port number: ${nnl}"
read port
done
getparam User $configfile
webowner=$param
weconfigfile="${installdir}we${port}.cnf"
defwebowner=`$lsg ${docroot}${service} | $awk ' { print $3}'`
webowner=""
until [ "$webowner" != "" ]
do
$echo "User name of the owner of this new web:[$defwebowner] ${nnl}"
read webowner
if [ "$webowner" = "" ]
then
webowner=$defwebowner
fi
done
getparam Group $configfile
defgroup=$param
webgroup=""
until [ "$webgroup" != "" ]
do
echo
$echo "Group of this new web:[$defgroup] ${nnl}"
read webgroup
if [ "$webgroup" = "" ]
then
webgroup=$defgroup
fi
done
until [ "$servertype" != "" ]
do
echo
echo " 1. ncsa"
echo " 2. apache"
echo " 3. apache-fp"
echo " 4. apache-wpp"
echo " 5. cern"
echo " 6. netscape-communication"
echo " 7. netscape-commerce"
echo " 8. netscape-fasttrack"
echo " 9. netscape-enterprise"
$echo "What type of Server is this: ${nnl}"
read servertypenum
echo
case $servertypenum in
"1") servertype="ncsa" ;;
"2") servertype="apache" ;;
"3") servertype="apache-fp" ;;
"4") servertype="apache-wpp" ;;
"5") echo "This version of fp_install.sh does not suppport cern servers."
echo "For details on how to install or upgrade servers manually, please see"
echo "the Server Extension Resource Kit (SERK), located in"
echo "/usr/local/frontpage/version3.0/serk" ;;
"6") servertype="netscape-communication" ;;
"7") servertype="netscape-commerce" ;;
"8") servertype="netscape-fasttrack" ;;
"9") servertype="netscape-enterprise" ;;
*) echo "Invalid option! Please try again." ;;
esac
done
multihost="."
if [ "$configfile" = "" ]
then
configfile="."
fi
PORT=$port
echo "Installing root web into port $port..."
echo
installserver $port $multihost $webname $webowner $webgroup $admin $adminpwd $configfile $servertype ||
{
echo "ERROR: $webname installation failed."
$echo "Hit enter to continue${nnl}"
read continue
return $retval
}
isItApacheFP
handlelanguage
return $retval
}
isItApacheFP()
{
retval=0
if [ "$servertype" = "apache-fp" ]
then
fpexe=$installdir'version'$VERSION'/apache-fp/_vti_bin/fpexe'
echo
echo "Chowning $fpexe to root..."
chown root $fpexe ||
(
echo "ERROR: Unable to chown $fpexe to root"
retval=1
)
echo "Setting $fpexe to SUID..."
chmod u+s $fpexe ||
(
echo "ERROR: Unable to set SUID for "$fpexe
retval=1
)
fi
return $retval
}
handlelanguage()
{
retval=0
until [ "$charencoding" != "" ]
do
echo
echo " 1. LATIN1 (ISO 8859-1)"
echo " 2. LATIN2 (ISO 8859-2)"
echo " 3. EUCJP (Japanese EUC)"
echo " 4. EUCKR (Korean EUC)"
$echo "Which local character encoding do your system support: [1] ${nnl}"
read charencodingnum
echo
case $charencodingnum in
"") charencoding="latin1" ;;
"1") charencoding="latin1" ;;
"2") charencoding="latin2" ;;
"3") charencoding="eucjp" ;;
"4") charencoding="euckr" ;;
*) echo "Invalid option! Please try again." ;;
esac
done
until [ "$lang" != "" ]
do
echo
echo " 1. English"
echo " 2. French"
echo " 3. German"
echo " 4. Italian"
echo " 5. Japanese"
echo " 6. Spanish"
$echo "What should the default language be: [1] ${nnl}"
read langnum
echo
case $langnum in
"") lang="en" ;;
"1") lang="en" ;;
"2") lang="fr" ;;
"3") lang="de" ;;
"4") lang="it" ;;
"5") lang="ja" ;;
"6") lang="es" ;;
*) echo "Invalid option! Please try again." ;;
esac
done
conffile=$installdir'version'$VERSION'/frontpage.cnf'
echo "Setting "$conffile" to:"
echo
echo "defaultLanguage:${lang}"
echo "localCharEncoding:${charencoding}"
echo
echo "Moving ${conffile} to ${conffile}.orig"
echo
mv $conffile ${conffile}.orig ||
{
echo "ERROR: Unable to backup $conffile to ${conffile}.orig!"
$echo "Hit enter to continue${nnl}"
read continue
return 1
}
echo "Creating and modifying new ${conffile}..."
echo
sed -e "s/defaultLanguage:.*/defaultLanguage:${lang}/g
s/localCharEncoding:.*/localCharEncoding:${charencoding}/g" \
${conffile}.orig > $conffile ||
{
echo "ERROR: Unable to create new $conffile!"
echo "If the file has been corrupted you should be able to replace it with"
echo "the backup file (${conffile}.orig)"
$echo "Hit enter to continue${nnl}"
read continue
return 1
}
return $retval
}
installvirtualwebs()
{
retval=0
echo
echo "Installing Virtual Webs.."
echo
myprompt 'yYnN' "Do you want to install Virtual Webs (y/n)" "Y"
if [ $answer = n ] || [ $answer = N ]
then
return $retval
fi
defaultconfigfile=$configfile
configfile=""
while ( [ "$configfile" = "" ] || [ ! -f $configfile ] )
do
$echo "Server config filename [${defaultconfigfile}]: ${nnl}"
read configfile
if [ "$configfile" = "" ]
then
configfile=$defaultconfigfile
fi
done
getparam Port $configfile
port=$param
getparam User $configfile
webowner=$param
case $configfile in
*magnus*) echo
echo "Looking for Netscape virtuals..."
n=0
resourcefile=`echo $configfile | sed -e 's/magnus\.conf/obj.conf/'`
urlhosts=`grep -i \urlhost $resourcefile`
if [ "$urlhosts" ]
then
novirtuals=0
else
novirtuals=1
fi
while [ "$urlhosts" ]
do
urlhost=`echo $urlhosts | sed -e '
s/>.*/>/'`
virtweb=`echo $urlhost | sed -e '
s/\"//g
s/ *<.*= *//
s/ *> *//'`
n=`expr $n + 1`
eval virtwebs$n="$virtweb"
urlhost=`echo $urlhost | sed -e '
s/\./\\\./g
s/\"/\\\"/g'`
urlhosts=`echo $urlhosts | sed -e "s/$urlhost *//"`
done
if [ $novirtuals = 1 ]
then
echo "ERROR: There are no valid virtual webs defined."
$echo "Hit enter to continue${nnl}"
read continue
return 1
fi
;;
*) #exec 4<&0
#exec <$configfile
#n=0
virtnames=`grep -i "^[^#]* *< *VirtualHost" $configfile | $awk '{print $2}' | sed -e 's/>//g'`
n=0
for word in $virtnames
do
n=`expr $n + 1`
eval virtwebs$n="$word"
done
;;
esac
while echo
n=1
val=`eval echo $"virtwebs$n"`
while [ "$val" != "" ]
do
echo " $n) $val"
n=`expr $n + 1`
val=`eval echo $"virtwebs$n"`
done
echo
$echo "Select the virtual web to install (CTRL-D if no more webs): ${nnl}"
read virtwebno
do
getparam Port $configfile
port=$param
until [ "$port" != "" ]
do
$echo "Enter the new servers port number: ${nnl}"
read port
done
port="`eval echo $"virtwebs$virtwebno"`:$port"
getHttpVirtualDirective $configfile $port User
defwebowner=$param
webowner=""
until [ "$webowner" != "" ]
do
$echo "User name of the owner of this new web:[$defwebowner] ${nnl}"
read webowner
if [ "$webowner" = "" ]
then
webowner=$defwebowner
fi
done
getHttpVirtualDirective $configfile $port Group
defwebgroup=$param
webgroup=""
until [ "$webgroup" != "" ]
do
echo
$echo "Group of this new web:[$defgroup] ${nnl}"
read webgroup
if [ "$webgroup" = "" ]
then
webgroup=$defgroup
fi
done
webname="/"
$echo "FrontPage Administrator's user name: ${nnl}"
read admin
getpassword "FrontPage Administrator's password"
adminpwd=$PASSWORD
until [ "$servertype" != "" ]
do
echo
echo " 1. ncsa"
echo " 2. apache"
echo " 3. apache-fp"
echo " 4. apache-wpp"
echo " 5. cern"
echo " 6. netscape-communication"
echo " 7. netscape-commerce"
echo " 8. netscape-fasttrack"
echo " 9. netscape-enterprise"
$echo "What type of Server is this: ${nnl}"
read servertypenum
echo
case $servertypenum in
"1") servertype="ncsa" ;;
"2") servertype="apache" ;;
"3") servertype="apache-fp" ;;
"4") servertype="apache-wpp" ;;
"5") echo "This version of fp_install.sh does not suppport cern servers."
echo "For details on how to install or upgrade servers manually, please see"
echo "the Server Extension Resource Kit (SERK), located in"
echo "/usr/local/frontpage/version3.0/serk" ;;
"6") servertype="netscape-communication" ;;
"7") servertype="netscape-commerce" ;;
"8") servertype="netscape-fasttrack" ;;
"9") servertype="netscape-enterprise" ;;
*) echo "Invalid option! Please try again." ;;
esac
done
multihost="`eval echo $"virtwebs$virtwebno"`"
if [ "$configfile" = "" ]
then
configfile="."
fi
if [ "$servertype" = "" ]
then
servertype="."
fi
PORT=$port
echo "Installing virtual root web into port $port..."
echo
installserver $port $multihost $webname $webowner $webgroup $admin $adminpwd $configfile $servertype ||
{
echo "ERROR: $webname installation failed."
$echo "Hit enter to continue${nnl}"
read continue
return $retval
}
isItApacheFP
handlelanguage
weconfigfile=""
installnewsubwebs $PORT || error # Install new servers
echo
done
return $retval
}
installnewsubwebs()
{
port=$1
retval=0
echo
myprompt 'yYnN' "Install new sub/per-user webs now (y/n)" "Y"
if [ $answer = n ] || [ $answer = N ]
then
echo "For details on how to upgrade servers manually, please see"
echo "the Server Extension Resource Kit (SERK), located in"
echo "/usr/local/frontpage/version3.0/serk"
echo
return $retval
fi
echo
if [ "$weconfigfile" = "" ]
then
until [ "$weconfigfile" != "" ] && [ -f $weconfigfile ]
do
port=""
if [ "$port" = "" ]
then
cat <<EOF
You need to specify which server to install the subweb into.
Examples:
80
www.virtual.web:80
where 80 is the port the server is running on.
EOF
$echo "Which server would you like to install the subweb into: ${nnl}"
read port
fi
echo
case $port in
*:*) weconfigfile="${installdir}${port}.cnf" ;;
*) weconfigfile="${installdir}we${port}.cnf" ;;
esac
done
fi
echo
echo "Using FrontPage Configuration File: ${weconfigfile}"
echo
servertype=`grep -i "^servertype:" $weconfigfile | sed -e 's/servertype://g'`
configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
s/serverconfig://g
s/fakeconf.*\///'`
configfiledir=`dirname $configfile`"/"
getdocroot $weconfigfile ||
{
echo "ERROR: Unable to get DocumentRoot/UserDir"
return 1
}
services=${docroot}"/_vti_pvt/services.cnf"
if [ ! -f $services ]
then
echo
echo "ERROR: The root web must be installed before sub/per-user webs!"
echo "Document Root: ${docroot}"
$echo "Hit enter to continue${nnl}"
read continue
echo
return $retval
fi
echo
while $echo "Enter the web name (CTRL-D if no more webs): ${nnl}"
read webname
do
$echo "FrontPage Administrator's user name: ${nnl}"
read admin
getpassword "FrontPage Administrator's password"
adminpwd=$PASSWORD
case "$webname" in
~*) PERUSER=1
echo
echo "Web $webname is a per-user web"
echo
webowner=$webname
;;
*) PERUSER=0
echo
echo "Web $webname is a subweb"
echo
$echo "User name of the owner of this new web: ${nnl}"
read webowner
;;
esac
getparam Group $configfile
defgroup=$param
webgroup=""
until [ "$webgroup" != "" ]
do
echo
$echo "Group of this new web:[$defgroup] ${nnl}"
read webgroup
if [ "$webgroup" = "" ]
then
webgroup=$defgroup
fi
done
multihost="."
if [ "$configfile" = "" ]
then
configfile="."
fi
if [ "$servertype" = "" ]
then
servertype="."
fi
installserver $port $multihost $webname $webowner $webgroup $admin $adminpwd $configfile $servertype ||
{
echo "ERROR: $webname installation failed."
$echo "Hit enter to continue${nnl}"
retval=0
read continue
}
echo
done
return $retval
}
installserver()
{
retval=0
port="$1"
multihost="$2"
webname="$3"
webowner="$4"
webgroup="$5"
admin="$6"
adminpwd="$7"
configfile="$8"
servertype="$9"
echo
echo "installing server "$webname" on port "$port
if [ "$PERUSER" = 1 ]
then
user=`echo $webowner | sed -e 's/~//g'`
echo
echo "Will chown per-user web to $user as part of install."
echo "Will chgrp per-user web to $webgroup as part of install."
chown="-xUser $user -xGroup $webgroup"
else
if [ "$webowner" != "." ]
then
echo
echo "Will chown web to $webowner as part of install."
echo "Will chgrp web to $webgroup as part of install."
chown="-xUser $webowner -xGroup $webgroup"
else
chown=""
fi
fi
if [ "$configfile" != "." ]
then
config="-s $configfile"
else
config=""
fi
if [ "$servertype" != "." ]
then
server="-type $servertype"
else
server=""
fi
if [ "$webname" != "/" ]
then
web="-w $webname"
else
web=""
fi
if [ "$multihost" != "." ]
then
/usr/local/frontpage/version${VERSION}/bin/fpsrvadm.exe -o install -p $port $web $config -u $admin -pw $adminpwd $server $chown -m $multihost || retval=1
else
/usr/local/frontpage/version${VERSION}/bin/fpsrvadm.exe -o install -p $port $web $config -u $admin -pw $adminpwd $server $chown -m "" || retval=1
fi
return $retval
}
getdocroot()
{
weconfigfile=$1
servertype=`grep -i "^servertype:" $weconfigfile | sed -e 's/servertype://g'`
configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
s/serverconfig://g
s/fakeconf.*\///'`
echo
echo "Getting DocumentRoot and UserDir."
if [ ! -f "$configfile" ]
then
echo "$configfile does not exist."
return 1
fi
configfiledir=`dirname $configfile`"/"
docroot=""
case $weconfigfile in
*:*) getvirtualdocroot $weconfigfile $configfile
;;
*) case $servertype in
*etscape*) getnetscapedocroot $configfile
;;
*) getHttpDirective $configfile ResourceConfig $port
if [ "$param" != "" ]
then
file=`basename $param`
resconffile="${configfiledir}${file}"
else
resconffile="${configfiledir}srm.conf"
fi
if [ ! -f "$resconffile" ]
then
echo "ERROR: $resconffile does not exist!"
return 1
fi
echo "Getting DocumentRoot from $resconffile."
getparam DocumentRoot $resconffile
docroot=$param
echo "Getting UserDir from $resconffile."
getparam UserDir $resconffile
userdir=$param
;;
esac
;;
esac
if [ ! -d "$docroot" ]
then
echo "ERROR: ${docroot} does not exist!"
return 1
fi
if [ "$docroot" = "" ]
then
echo "ERROR: DocumentRoot not defined!"
return 1
fi
echo
echo "DocumentRoot: $docroot"
if [ "$userdir" = "" ]
then
echo "WARNING: UserDir not defined."
else
echo "UserDir: $userdir"
fi
echo
return 0
}
getHttpDirective()
{
configfile=$1
directive=$2
port=$3
case $port in
*:*) getHttpVirtualDirective $configfile $port $directive ;;
*) getHttpRootDirective $configfile $directive ;;
esac
if [ "$param" = "" ]
then
echo "Directive $directive not found."
else
echo "Found Directive $directive, value $param."
fi
}
getHttpRootDirective()
{
configfile=$1
directive=$2
mc_directive=`$awk "
BEGIN {
newstring = \"\";
oldstring = \"$directive\";
strlen = length(oldstring);
for ( i = 1; i <= strlen; ++i ) {
char = substr(oldstring, i, 1)
newstring = newstring \"[\" toupper(char) tolower(char) \"]\";
};
print newstring}"`
param=`cat $configfile | $awk "
/^[^#]* *< *[Vv][Ii][Rr][Tt][Uu][Aa][Ll][Hh][Oo][Ss][Tt]/,/^[^#]* *< *\/[Vv][Ii][Rr][Tt][Uu][Aa][Ll][Hh][Oo][Ss][Tt]/ { next }
/^[^#]* *$mc_directive[ $TAB]/ { print \\\$2 }"`
return 0
}
getHttpVirtualDirective()
{
configfile=$1
port=$2
directive=$3
virtweb=`echo $port | sed -e 's/:[0-9]*.$//'`
virtweb=`basename $virtweb`
mc_directive=`$awk "
BEGIN {
oldstring=\"$directive\"
newstring = \"\";
strlen = length(oldstring);
for ( i = 1; i <= strlen; ++i ) {
char = substr(oldstring, i, 1)
newstring = newstring \"[\" toupper(char) tolower(char) \"]\";
};
print newstring }"`
param=`cat $configfile | $awk "
BEGIN { value = \"\" }
{ x=0 }
/^[^#]* *< *[Vv][Ii][Rr][Tt][Uu][Aa][Ll][Hh][Oo][Ss][Tt] +$virtweb/,/^[^#]* *< *\/[Vv][Ii][Rr][Tt][Uu][Aa][Ll][Hh][Oo][Ss][Tt]/ { x=1 }
/^[^#]* *$mc_directive[ $TAB]/ { if (x==1) value = \\\$2 }
END { print value }"`
if [ "$param" = "" ]
then
getHttpRootDirective $configfile $directive
fi
}
getnetscapedocroot()
{
configfile=$1
echo "Getting DocumentRoot from ${configfiledir}obj.conf."
resourcefile=`echo $configfile | sed -e 's/magnus\.conf/obj.conf/'`
echo
echo "Getting DocumentRoot from ${resourcefile}."
exec 4<&0
exec <$resourcefile
while read line
do
uc_line=`echo $line | tr [a-z] [A-Z]`
case $uc_line in
*DOCUMENT-ROOT*) docroot=`echo $line | sed -e '
s/\"//g
s/.* [Rr][Oo][Oo][Tt]= *//
s/ .*//'`
;;
*SUBDIR*) userdir=`echo $line | sed -e '
s/\"//g
s/.* [Ss][Uu][Bb][Dd][Ii][Rr]= *//
s/ .*//'`
;;
\<CLIENT*) while read line
do
uc_line=`echo $line | tr [a-z] [A-Z]`
case $uc_line in
\</CLIENT\>) break
;;
esac
done
;;
esac
done
exec <&4
}
getvirtualdocroot()
{
weconfigfile=$1
configfile=$2
virtweb=`echo $weconfigfile | sed -e '
s/:/:/
tmulti
s/.cnf$//
s/.*[^0-9]//
q
:multi
s/:[0-9]*.cnf$//'`
virtweb=`basename $virtweb`
case $configfile in
*magnus*) n=0
resourcefile=`echo $configfile | sed -e 's/magnus\.conf/obj.conf/'`
exec 4<&0
exec <$resourcefile
echo
echo "Looking for Client block of $resourcefile..."
while read line
do
uc_line=`echo $line | tr [a-z] [A-Z]`
case $uc_line in
*URLHOST*) virtname=`echo $line | sed -e '
s/\"//g
s/ *<.*= *//
s/ *>.*//'`
if [ "$virtweb" = "$virtname" ]
then
echo "Found Client block. Getting Document-Root and Subdir..."
while read line
do
uc_line=`echo $line | tr [a-z] [A-Z]`
case $uc_line in
*DOCUMENT-ROOT*) docroot=`echo $line | sed -e '
s/\"//g
s/.* [Rr][)o][Oo][Tt]= *//
s/ .*//'`
;;
*SUBDIR*) userdir=`echo $line | sed -e '
s/\"//g
s/.* [Ss][Uu][Bb][Dd][Ii][Rr]= *//
s/ .*//'`
;;
\</CLIENT\>) break
;;
esac
done
fi
;;
esac
done
exec <&4
;;
*)
getHttpVirtualDirective $configfile $port DocumentRoot
docroot=$param
if [ "$docroot" = "" ]
then
echo "VirtualHost block does not contain DocumentRoot directive."
getHttpDirective $configfile ResourceConfig $port
if [ "$param" != "" ]
then
file=`basename $param`
resconffile="${configfiledir}${file}"
else
resconffile="${configfiledir}srm.conf"
fi
echo "Getting DocumentRoot from $resconffile."
getparam DocumentRoot $resconffile
docroot=$param
fi
getHttpVirtualDirective $configfile $port UserDir
userdir=$param
if [ "$userdir" = "" ]
then
echo "VirtualHost block does not contain UserDir directive."
getHttpDirective $configfile ResourceConfig $port
if [ "$param" != "" ]
then
file=`basename $param`
resconffile="${configfiledir}${file}"
else
resconffile="${configfiledir}srm.conf"
fi
echo "Getting UserDir from $resconffile."
getparam UserDir $resconffile
userdir=$param
fi
;;
esac
}
error()
{
#
# Print an error message and exit the program
#
echo
echo "Exiting due to an error! Please fix the error and try again."
echo
exit 1
}
getparam() {
#
# gets the value of parameters from the config file
#
param=`egrep -i "^[ $TAB]*$1[ $TAB]" $2 | $awk '{print $2}'` || return 1
return 0;
}
#
# This is the main part of the shell script.
#
initialize
step1
step2
step3
echo
echo "Installation completed! Exiting..."
exit 0